clear
clc
close all
PTime=[2.5 3.6 4.0 2.7 1.5 4.4 4.0;3.7 2.9	4.0	2.9	2.6	2.2	3.9;2.1	3.1	2.0	3.0	1.2	2.7	3.5;2.5	2.5	4.0	1.4	1.7	3.6	4.9;4.0	2.0	4.0	2.9	1.6	2.2	2.5;2.4	3.2	4.0	2.2	2.6	2.0	4.2;4.0	3.5	3.0	1.8	1.4	2.5	2.0;1.3	2.3	2.0	1.6	2.1	2.9	3.6;3.1	3.4	4.0	1.2	2.4	4.3	4.0;1.6	2.9	3.0	1.7	2.6	4.5	2.0;3.7	2.5	4.0	1.4	2.9	4.3	3.9;2.7	3.7	4.0	1.7	1.2	3.0	3.4;1.3	4.0	3.0	2.3	2.2	4.1	4.7;];
Bin=[600,800];  %箱子宽度与高度
itemNum=13;  %物品数目
Item=[300 400;300 400;600 400;600 400;550 380;300 320;600 750;600 750;560 400;290 360;290 360;580 420;510 450;];  
S = 0;
for i=1:itemNum
    S = S + Item(i,1)*Item(i,2);
end
R=S/(600*800*13);
%%  参数设置

SearchAgents = 15;                        % population members 
Max_iterations = 40;                    % maximum number of iteration
lb = 0;
ub = 1;
dim =13*7;
fobj = @Caltime;
% [Alpha_score,Alpha_pos,FTTA_Convergence_curve]=FTTA(SearchAgents,Max_iterations,lb,ub,dim,fobj,PTime); % 调用FTTA算法

%[SA_score,SA_pos,SA_Convergence_curve]=SA(Max_iterations,lb,ub,dim,PTime,fobj); % 调用SA算法

[GA_score,GA_pos,GA_Convergence_curve]=GA(SearchAgents,Max_iterations,fobj,PTime,dim); % 调用GA算法

[PNumber,MNumber]=size(PTime);  
[GA_TCost,Mspan,Scheme,BginTime]=my_cal(PTime,GA_pos);


% CNT=15;
% k=round(linspace(1,Max_iterations,CNT)); %随机选CNT个点
% % 注意：如果收敛曲线画出来的点很少，随机点很稀疏，说明点取少了，这时应增加取点的数量，100、200、300等，逐渐增加
% % 相反，如果收敛曲线上的随机点非常密集，说明点取多了，此时要减少取点数量
% iter=1:1:Max_iterations;
%  plot(iter(k),SA_Convergence_curve(k)/(R*1000),'b-*','linewidth',1);
%  hold on;
%  plot(iter(k),FTTA_Convergence_curve(k)/(R*1000),'r->','linewidth',1);
%  hold on;
%  plot(iter(k),GA_Convergence_curve(k)/(R*1000),'g-d','linewidth',1);
% 
% grid on;
% title('收敛曲线')
% xlabel('迭代次数');
% ylabel('适应度值');
% box on
% legend('SA','FTTA','GA')
% set (gcf,'position', [300,300,800,330])







%% 显示最优解 （甘特图）
figure;
set(gca,'FontName','Times New Roman','FontSize',24)
set(gcf,'Color','white')
xlabel('processing time(h)'); 
ylabel('group id'); 
% axis([0,max(max(Mspan)),0,PNumber]);                  %x轴 y轴的范围
set(gca,'xtick',0:20:max(max(Mspan))) ;%x轴的增长幅度????时间的间隔待定!!!!!!!!!!!!!!!!
set(gca,'ytick',0:1:PNumber);         %y轴的增长幅度
set(gca,'Box','on');                  %图形的右边和上边有实线，封闭
%set(gca,'YTickLabel',{'';num2str((1:PNumber)','Element%d');''});  %y轴的标签修改为“element *"格式
title('Gantt chart');                 %图形的标题


rec=[0,0,0,0];%所画矩形的属性初始化，即坐标及长宽
for i =1:PNumber
    for j=1:MNumber
  rec(1) = BginTime(i,j);%所画矩形的横坐标x,工序开始时间
  rec(2) = i-0.2;  %所画矩形的起始纵坐标y，即在哪一行画线
  rec(3) = (Mspan(i,j)- BginTime(i,j));  %所画矩形的x轴方向长度,工序的持续时间
  rec(4) = 0.6; %所画矩形的y轴方向高度
 %txt=sprintf('N%d',j);%显示内容为“N工序名”
  rectangle('Position',rec,'LineWidth',0.5,'LineStyle','-');%draw every rectangle  

  %text(BginTime(i,j)+0.5,i+0.2,txt);%字体的坐标和内容
   %%%%%%%%%%%%%%%%%%%%%%%如果每个矩形内容显示不全，增大x轴间距!!!!!!!!!!!!!!!!!!!
    end
end







